/**
 * 文件下载工具函数
 * 统一处理文件下载逻辑，包括错误处理
 */

/**
 * 下载文件
 * @param {Object} response - axios 响应对象
 * @param {String} defaultFileName - 默认文件名（如果响应头中没有文件名）
 * @returns {Promise<void>}
 */
export function downloadFile(response, defaultFileName = 'download.xlsx') {
  return new Promise((resolve, reject) => {
    try {
      // 检查响应数据是否为 Blob 类型
      if (!(response.data instanceof Blob)) {
        throw new Error('响应数据不是 Blob 类型')
      }

      // 获取文件名
      const disposition = response.headers['content-disposition']
      let fileName = defaultFileName

      if (disposition && disposition.includes('attachment')) {
        // 尝试从 Content-Disposition 头中提取文件名
        const fileNameMatch = disposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/)
        if (fileNameMatch && fileNameMatch[1]) {
          // 移除引号
          fileName = fileNameMatch[1].replace(/['"]/g, '')
          // 解码文件名（处理中文乱码）
          try {
            fileName = decodeURIComponent(fileName)
          } catch (e) {
            // 如果解码失败，使用原始文件名
            console.warn('文件名解码失败，使用原始文件名')
          }
        }
      }

      // 创建 Blob 对象
      const blob = new Blob([response.data], {
        type: response.headers['content-type'] || 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
      })

      // 创建临时下载链接
      const url = window.URL.createObjectURL(blob)
      const link = document.createElement('a')
      link.href = url
      link.setAttribute('download', fileName)
      document.body.appendChild(link)
      link.click()

      // 清理
      document.body.removeChild(link)
      window.URL.revokeObjectURL(url)

      resolve()
    } catch (error) {
      console.error('文件下载失败:', error)
      reject(error)
    }
  })
}








